/*
枚举排列例3：https://www.luogu.com.cn/problem/B3623
要点：
•dfs(i) 表示枚举到第i个人。
•a 数组保存当前枚举情况，a[i] 来存第i个人是谁。
•只有use[i] =0 时可以使用i；
•在填充i后将use[i] 设为1，然后继续枚举下一个；
•递归回来后，将use[i] 还原
*/

#include <bits/stdc++.h>
using namespace std;

int n, k;
int a[15], use[15];

void dfs(int pos) {
    if(pos == k + 1) {
        for(int i = 1; i <= k; i++)
            cout << a[i] << ' ';
        cout << endl;

        return;
    }

    for(int i = 1; i <= n; i++)
        if(!use[i]) { // 如果第 i 个元素没有被使用
            use[i] = 1; // 将其标记为被使用
            a[pos] = i; // 更新 a[pos]
            dfs(pos + 1); // 枚举下一个
            use[i] = 0; // 将其标记为未被使用
        }
}

int main() {
    cin >> n >> k;

    dfs(1);

    return 0;
}

/*
g++ dfs/dfs_3.cpp && echo 3 2 | ./a.out
*/